import axios, { type AxiosRequestHeaders, type AxiosResponse } from 'axios'
import pinia from '@/stores/index'
// 引入 NProgress
import NProgress from 'nprogress'
import 'nprogress/nprogress.css'

// /* 定义response对象的data接口 */
// interface ResponseData<T> {
//   code: number;
//   data: T;
//   message: string;
// }

// 配置新建一个 axios 实例
const service = axios.create({
  baseURL: '/app-dev',
  timeout: 50000
})

// 添加请求拦截器
service.interceptors.request.use((config) => {
  NProgress.start()
  // 要么添加额外功能
  // 要么配置请求头

  const token = localStorage.getItem('token_key')
  if (token) {
    ;(config.headers as AxiosRequestHeaders).token = token
  }
  return config //必须要返回
})

// 添加响应拦截器
service.interceptors.response.use(
  /* 约束一下response */
  async (response: AxiosResponse<any>) => {
    NProgress.done()
    // 对响应数据做点什么
    const res = response.data
    if (res.code !== 200) {
      // 使用vant统一的错误提示【未完成】

      // `token` 过期或者账号已在别处登录
      if (response.status === 401) {
        // 重置用户信息
        // const storeUserInfo = useUserInfoStore(pinia)
        // await storeUserInfo.reset()
        window.location.href = '/' // 去登录页
      }
      return Promise.reject(service.interceptors.response)
    } else {
      return res.data /* 返回成功响应数据中的data属性数据 */
    }
  },
  (error) => {
    // 使用vant提示错误【未完成】

    // 统一处理错误
    return Promise.reject(error)
  }
)

export default service
